package com.zxx.pattern.statePattern.state;

/**
 * 状态模式
 * @author zxx on 2021/1/14
 */
public class CandyTest {

    public static void main(String[] args) {
        CandyMachine candyMachine = new CandyMachine(5);

        //最初state是StateNoMoney（没有投币的状态）
        candyMachine.popCandy();  //肯定无效
        candyMachine.turnCrank();  //肯定无效
        candyMachine.returnMoney();  //肯定无效

        //所以需要调用投入一元的状态，用来改变状态为（投币后的状态）
        //调用StateNoMoney的onMoneyInserted方法，修改state的状态为StateMoneyInserted
        candyMachine.insertMoney();

        //此时状态为StateMoneyInserted（投币后的状态），调用其onCrankTurned方法
        candyMachine.turnCrank();


//        candyMachine.insertMoney();
//        candyMachine.returnMoney();  //正在退钱......退钱成功！


//        candyMachine.popCandy();  //正在退钱......退钱成功！


        //-------------改变状态要用setState, 而不是用具体的setX方法
        candyMachine.setMoneyInsertedState(new StateMoneyInserted(candyMachine));
        candyMachine.getMoneyInsertedState().onMoneyReturned();
    }

}
